package com.juzi.theInterface;

public class Introduce {
    public static void main(String[] args) {
        System.out.println("===========================\n" +
                "接口的定义与特点\n" +
                "接口的格式如下：\n" +
                "接口用关键字interface来定义\n" +
                "public interface 接口名 {\n" +
                "       // 常量\n" +
                "       // 抽象方法\n" +
                "} \n" +
                "\n" +
                "JDK8之前接口中只能是抽象方法和常量，没有其他成分了。\n" +
                "接口不能实例化。\n" +
                "接口中的成员都是public修饰的，写不写都是，因为规范的目的是为了公开化。\n" +
                "\n" +
                "---------------------------------\n" +
                "什么是接口\n" +
                "接口也是一种规范。\n" +
                "\n" +
                "---------------------------------\n" +
                "接口的用法：\n" +
                "接口是用来被类实现（implements）的，实现接口的类称为实现类。实现类可以理解成所谓的子类。\n" +
                "修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {\n" +
                "}\n" +
                "实现的关键字：implements\n" +
                "\n" +
                "从上面可以看出，接口可以被类单实现，也可以被类多实现。\n" +
                "\n" +
                "---------------------------------\n" +
                "接口实现的注意事项：\n" +
                "一个类实现接口，必须重写完全部接口的全部抽象方法，否则这个类需要定义成抽象类。\n" +
                "\n" +
                "---------------------------------\n" +
                "基本小结\n" +
                "类和类的关系：单继承。\n" +
                "类和接口的关系：多实现。\n" +
                "接口和接口的关系：多继承，一个接口可以同时继承多个接口。\n" +
                "---------------------------------\n" +
                "接口多继承的作用\n" +
                "规范合并，整合多个接口为同一个接口，便于子类实现。\n" +
                "---------------------------------\n" +
                "第一种：默认方法\n" +
                "类似之前写的普通实例方法：必须用default修饰\n" +
                "默认会public修饰。需要用接口的实现类的对象来调用\n" +
                "\n" +
                "default void run(){\n" +
                "    System.out.println(\"--开始跑--\");\n" +
                "}\n" +
                "\n" +
                "---------------------------------\n" +
                "第二种：静态方法\n" +
                "默认会public修饰，必须static修饰。\n" +
                "注意：接口的静态方法必须用本身的接口名来调用。\n" +
                "static void inAddr(){\n" +
                "   System.out.println(\"我们都在黑马培训中心快乐的学习Java!\");\n" +
                "}\n" +
                "\n" +
                "---------------------------------\n" +
                "第三种：私有方法\n" +
                "就是私有的实例方法:，必须使用private修饰，从JDK 1.9才开始有的。\n" +
                "只能在本类中被其他的默认方法或者私有方法访问。\n" +
                "private void go(){\n" +
                "    System.out.println(\"--准备--\");\n" +
                "}\n" +
                "---------------------------------\n" +
                "1、JDK8开始后新增了那些方法?\n" +
                "默认方法：default修饰，实现类对象调用。\n" +
                "静态方法：static修饰，必须用当前接口名调用\n" +
                "私有方法：private修饰，jdk9开始才有的，只能在接口内部被调用。\n" +
                "他们都会默认被public修饰。\n" +
                "---------------------------------\n" +
                "接口的注意事项\n" +
                "1、接口不能创建对象\n" +
                "2、一个类实现多个接口，多个接口的规范不能冲突\n" +
                "2、一个类实现多个接口，多个接口中有同样的静态方法不冲突。\n" +
                "3、一个类继承了父类，同时又实现了接口，父类中和接口中有同名方法，默认用父类的。\n" +
                "4、一个类实现了多个接口，多个接口中存在同名的默认方法，可以不冲突，这个类重写该方法即可。\n" +
                "5、一个接口继承多个接口，是没有问题的，如果多个接口中存在规范冲突则不能多继承。\n");
    }
}
